package ifes;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
 * Separa as silabas de uma palavra
 */
public class SeparadorSilabas {

    public static List<String> getSilabas(String palavra) {

        List<String> silabas = new ArrayList<>();

        String[] arr_separaveis = {"rr", "ss", "sc", "sç", "xc", "xs", "cc", "cç", "aa", "ee", "ii", "oo", "uu", "ae", "ai", "ao", "ea", "eo", "ia", "io", "oa", "oe"};
        String[] arr_inseparaveis = {"au", "ei", "eu", "iu", "oi", "ou", "gua", "gue", "gui", "guo", "qua", "que", "qui", "quo", "ch", "lh", "nh", "çã"};
        String[] arr_vogais = {"a", "e", "i", "o", "u"};
        String[] arr_consoantes = {"b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"};

        List<String> ls_vogais = Arrays.asList(arr_vogais);
        List<String> ls_consoantes = Arrays.asList(arr_consoantes);
        List<String> ls_inseparaveis = Arrays.asList(arr_inseparaveis);

        List<String> silabasProntas = new ArrayList<>();
        List<String> encontrosConsonantais = new ArrayList<>();

        for (int j = 0; j < arr_consoantes.length; j++) {
            for (int k = 0; k < arr_vogais.length; k++) {
                silabasProntas.add(arr_consoantes[j] + arr_vogais[k]);
            }
            for (int k = 0; k < arr_consoantes.length; k++) {
                if (j != k) {
                    if (!ls_inseparaveis.contains(arr_consoantes[j] + arr_consoantes[k])) {
                        encontrosConsonantais.add(arr_consoantes[j] + arr_consoantes[k]);
                    }
                }

            }
        }

        for (int j = 0; j < arr_inseparaveis.length; j++) {
            for (int k = 0; k < arr_vogais.length; k++) {
                silabasProntas.add(arr_inseparaveis[j] + arr_vogais[k]);
            }
        }


        silabas.add(palavra);
        /**
         * DIGRAFOS
         */
        int i = 0;
        while (i < silabas.size()) {

            String silaba = silabas.get(i);

            boolean separavel = false;


            for (int j = 0; j < arr_separaveis.length; j++) {
                int posicao = silaba.indexOf(arr_separaveis[j]);
                if (posicao > -1) {
                    String anterior = silaba.substring(0, posicao + 1);
                    String posterior = silaba.substring(posicao + 1, silaba.length());
                    silabas.remove(i);
                    silabas.add(i, anterior);
                    silabas.add(i + 1, posterior);
                    separavel = true;
                    break;
                }
            }
            if (separavel) {
                continue;
            }

            i++;
        }

        int j = 0;
        while (j < silabas.size()) {

            String silaba = silabas.get(j);
            boolean separavel = false;

            if (silaba.length() > 2) {
                for (int k = 0; k < silaba.length(); k++) {
                    
                    if (ls_vogais.contains(silaba.charAt(k) + "")) {
                        if (silaba.substring(k + 1, silaba.length()).length() >= 2) {
                            if (ls_vogais.contains(silaba.charAt(k + 1) + "")) {
                                if (ls_inseparaveis.contains(silaba.charAt(k) + silaba.charAt(k + 1) + "")) {
                                    String anterior = silaba.substring(0, k + 3);
                                    String posterior = silaba.substring(k + 3, silaba.length());
                                    silabas.remove(j);
                                    silabas.add(j, anterior);
                                    silabas.add(j + 1, posterior);
                                }
                            } else {


                                if (ls_consoantes.contains(silaba.charAt(k + 1) + "") && ls_consoantes.contains(silaba.charAt(k + 2) + "") && !ls_inseparaveis.contains(silaba.substring(k + 1, k + 3))) {
                                    if (silaba.length() >= 3 && ls_consoantes.contains(silaba.charAt(k + 3) + "") && !ls_inseparaveis.contains(silaba.substring(k + 2, k + 4))) {
                                        String anterior = silaba.substring(0, k + 3);
                                        String posterior = silaba.substring(k + 3, silaba.length());
                                        silabas.remove(j);
                                        silabas.add(j, anterior);
                                        silabas.add(j + 1, posterior);
                                        separavel = true;
                                        j++;
                                    } else {
                                        String anterior = silaba.substring(0, k + 2);
                                        String posterior = silaba.substring(k + 2, silaba.length());
                                        silabas.remove(j);
                                        silabas.add(j, anterior);
                                        silabas.add(j + 1, posterior);
                                        separavel = true;
                                    }
                                }
                                
                                if (!separavel) {
                                    String anterior = silaba.substring(0, k + 1);
                                    String posterior = silaba.substring(k + 1, silaba.length());
                                    silabas.remove(j);
                                    silabas.add(j, anterior);
                                    silabas.add(j + 1, posterior);
                                    break;
                                }
                            }
                        }
                    }
                    if (separavel) {
                        break;
                    }
                }
            }
            if (separavel) {
                continue;
            }
            j++;
        }       

        return silabas;
    }

    public static void main(String[] args) {
        String palavra = "palavra";
        List<String> pal = getSilabas(palavra);
        for (String s : pal) {
            System.out.print(s + "-");
        }
    }
}